package com.zhu.exercise.array;

import org.junit.Test;

import java.util.Arrays;

public class SingleNumber {

    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        for(int i= 0 ;i<=nums.length-1;){
            int j =i+1;
            if(j>nums.length-1){
                return nums[i];
            }else{
                while(nums[i]==nums[j]){
                    j++;
                }
                if(i+1==j){
                    return nums[i];
                }else{
                    i=j;
                }
            }
        }
        return 0;
    }

    /**
     * 异或所有数字，剩下的就是单个那个数
     * 任何数和 0 做异或运算，结果仍然是原来的数，即 a^0=a。
     * 任何数和其自身做异或运算，结果是 00，即 a⊕a=0。
     * 异或运算满足交换律和结合律，即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
     *
     */
    public int singleNumber2(int[] nums) {
        int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;
    }

    @Test
    public void run(){
        int[] array = {4,1,2,1,2};
        int result = singleNumber2(array);
        System.out.println(result);
    }

}
